import Vue from 'vue'
import Router from 'vue-router'
import store from './store/index'

Vue.use(Router)

// 路由模块
import adminRouter from './views/admin/router'
import loginRouter from './views/login/router'


/**
 * Note: 子菜单仅在路由 children.length> = 1 时出现
 * 详情请看: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
 *
 * hidden: true                  如果设置为true，则项目不会显示在侧边栏中（默认为false）
 * alwaysShow: true              如果设置为true，将始终显示根菜单
 *                               如果未设置alwaysShow，则当项具有多个子路线时，它将变为嵌套模式，否则不显示根菜单
 * redirect: noRedirect          如果设置noRedirect，则不会在面包屑中重定向
 * name:'router-name'            该名称由<keep-alive>使用（必须设置！！！）
 * meta : {
    roles: ['admin','editor']    控制页面角色（您可以设置多个角色）
    title: 'title'               名称显示在侧边栏和面包屑中（推荐设置）
    icon: 'svg-name'/'el-icon-x' 侧栏中的图标显示
    noCache: true                如果设置为true，将不缓存页面（默认为false）
    affix: true                  如果设置为true，则标签将固定在标签视图中
    breadcrumb: false            如果设置为false，则该项目将隐藏在面包屑中（默认为true）
    activeMenu: '/example/list'  如果设置了路径，则侧边栏将突出显示您设置的路径
  }
 */

// 没有权限要求的基本页面，所有等级的用户都可访问
export const constantRoutes = [
  ...loginRouter,
  {
    path: '*',
    name: 'notFound',
    hidden: true,
    component: () => import('@/views/view-404.vue')
  }
]

// 需要根据用户角色动态加载的路由
export const asyncRoutes = [
  ...adminRouter,
]

const createRouter = () => new Router({
  // mode: 'history', // require service support
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRoutes
})

const router = createRouter()

// 还原 router。详情请看: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
export function resetRouter() {
  const newRouter = createRouter()
  router.matcher = newRouter.matcher // reset router
}

store.dispatch('permission/generateRoutes', 'admin')

// router.beforeEach((to, from, next) => {
//   store.dispatch('permission/generateRoutes', 'admin').then(res => {
//     console.log(res);
//     router.addRoute(res)
//   })
//
//   next()
// })


asyncRoutes.forEach(m => {
  router.addRoute(m)
})

// dynamically add accessible routes

/* 设置 路由中的 meta.logonValidate=true 可以开启未登录拦截 */
/*router.beforeEach((to, from, next) => {
  try {
    // 记录上一次的路由，在部分需要使用 go(-1) 的页面做判断，防止陷入死循环
    sessionStorage.setItem('formPath', from.path)
  } catch (e) {
    console.log(e);
  }

  let wm = window.mvvm

  if (to.meta && to.meta.title) {
    document.title = to.meta.title
  }

  if (wm && wm.$store) {
    if (wm.$store.state && wm.$store.state.is_login) {
      let d = Number(localStorage.getItem('login_time') || 0)
      let dd = Date.now()
      if (dd - d <= 1000 * 60 * 60) { // 离开60分钟登陆过期
        localStorage.setItem('login_time', Date.now())
      } else {
        wm.$store.commit('clearUserInfo')
      }
      next()
    } else {
      if (to.meta && to.meta.logonValidate) {
        wm.$toast('请先登录！')
        next({
          path: '/login',
          query: { redirect: to.fullPath } // 将跳转的路由path作为参数，登录成功后可以跳转到该路由
        })
      } else {
        next()
      }
    }
  } else {
    // window.mvvm 为undefined 则页面未加载完成，需要延时再做判断
    setTimeout(() => {
      next({
        ...to,
        replace: true
      })
    })
  }
})*/


export default router
